// 2025.09.10 15:23:23 星期三 阴 被 打 怕了... 赢不了
// 心情非常低落 因为什么 究其原因 是 目前 没有创新 项 非常苦恼 而且 在 重写 之前的 根本就没有长进

import { set_static_css } from '../../Css/Func/set_static_css';
import { normalizeContainer } from '../normalizeContainer';
import { remove_class } from '../remove_class';
import { drag_dom_operate } from './Classes/cla_drag_dom_operate';
import { spacename_drag_dom } from './DataDefine/sourceData';

// 这个是 将 给定元素 做 可以拖动

/**
 * 全局 记录 drag 元素 信息
 */
const glo_drag_info: { [_: string]: drag_dom_operate } = {};

/**
 * 将当前元素 设定 为 可拖动
 */
export function init_drag(target_dom: HTMLElement) {
  let cur_dom = normalizeContainer(target_dom);
  if (cur_dom == null) {
    return;
  }

  let compedEl = window.getComputedStyle(cur_dom);

  if (!['absolute', 'relative'].includes(compedEl.position)) {
    console.log('sorry ', cur_dom, ' position is not "absolute" or "relative"');
    return;
  }

  active_dragEl(cur_dom);
}

/**
 * 移除 当前元素 设定 为 可拖动 行为
 */
export function remove_drag(target_dom: HTMLElement) {
  let cur_dom = normalizeContainer(target_dom);
  if (cur_dom == null) {
    return;
  }

  remove_dragEl(cur_dom);
}

/**
 * 将 当前 元素 包装成 可 拖动对象
 */
function active_dragEl(cur_dom: HTMLElement) {
  // 装载 unit drag mana 信息
  let unit_mana = new drag_dom_operate(cur_dom);

  glo_drag_info[cur_dom.id] = unit_mana;

  // unit_mana.attribute_mana = cueEl_attribute_mana;
  unit_mana.init();

  let dragID = cur_dom.id;

  let staCssCla = `v_drag_${dragID}`;

  let V_DCla = get_dom_v_drag_class(cur_dom);

  // 添加 class 到 目标元素中
  remove_class(cur_dom, V_DCla, true);

  //添加 drag 标识
  remove_class(cur_dom, spacename_drag_dom, true);

  // 添加 hover 鼠标 手形状
  remove_class(cur_dom, 'cursorPointer', true);

  // 最高高度
  remove_class(cur_dom, 'z_i99', true);

  //   添加 动态 css var 样式 到 head 元素中
  cssVar_top0left(staCssCla, V_DCla);
}

/**
 * 移除 所有 拖动 对象信息
 */
function remove_dragEl(cur_dom: HTMLElement) {
  // 元素 没有 drag_dom 标识 时 直接退出
  if (!cur_dom.classList.contains(spacename_drag_dom)) {
    return;
  }

  let unit_mana = glo_drag_info[cur_dom.id];

  // 移除 所有信息 事件
  unit_mana.remove();

  // 移除 drag 元素 记录
  delete glo_drag_info[cur_dom.id];

  let V_DCla = get_dom_v_drag_class(cur_dom);

  // 添加 class 到 目标元素中
  remove_class(cur_dom, V_DCla);

  //添加 drag 标识
  remove_class(cur_dom, spacename_drag_dom);

  // 添加 hover 鼠标 手形状
  remove_class(cur_dom, 'cursorPointer');
}

/**
 * 设置当前 css_var 动态 位置 类
 */
function cssVar_top0left(staCssCla: string, V_DCla: string) {
  set_static_css(
    staCssCla,
    `.${V_DCla}{
        top : var(--top) !important;
        left : var(--left) !important;
        transform:none !important;
        transition:top 0s !important ,left 0s !important;
    }`
  );
}

export function get_dom_v_drag_class(dom: HTMLElement) {
  return `v_D_${dom.id}`;
}
